(w <- 1:52) [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
[26] 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
[51] 51 52
______________________________________________________________________________________________________________
Nota: este reporte especial está dirigido a profesionales del aseguramiento de la calidad y de la gestión de medio ambiente. No todo el material les parecerá novedoso. La innovación propuesta es la integración de la estocástica y la sostenibilidad en un mismo cuerpo de conocimeinto, para la validación científica del desempeño ambiental mediante el análisis de datos y abandonar la simulación y el comfort de mediciones incompletas. La agenda 2030 lo requiere.
Y tú, ¿ya estás haciendo algo en serio para erradicar el greenwashing corporativo de tu organización?
______________________________________________________________________________________________________________
En la gestión moderna del desempeño (ambiental, operativo o de sostenibilidad) ya no es suficiente medir, graficar o reportar promedios. Las organizaciones serias enfrentan una exigencia mucho más concreta: demostrar, con base analítica sólida, si un cambio ocurrió y cuándo ocurrió.
Para eso existe la Ciencia de Datos Ambientales. Y, al menos para organizaciones sujetas al escrutinio de sus estados financieros de acuerdo con los párrafos 33, 34 y 35 de la norma IFRS S2 de sostenibilidad, de la que México es miembro activo, la rendición de cuentas del desempeño ambiental con base científica ya no es opcional. Omitirla o tergiversarla constituye, de acuerdo con la Primera Sesión de la Alianza Regional Latinoamericana, una forma de greenwashing. Los reportes ESG tradicionales han perdido credibilidad y hoy resultan insuficientes; la propia Alianza lo ha señalado públicamente.
Esta exigencia no proviene únicamente de reguladores como el ISSB o agencias certificadoras. Proviene de la misma ONU y también de una necesidad interna: poder distinguir, sin ambigüedad ni arbitrariedad, entre el antes y el después de una intervención, una política, un proyecto, un ajuste operativo o una estrategia de mejora continua.
En contextos de rendición de cuentas, particularmente en sostenibilidad y en el marco de la agenda 2030, esta distinción es crucial para evitar narrativas vagas, retrospectivas acomodadas o interpretaciones subjetivas que pueden derivar en greenwashing, aun sin intención explícita.
El problema es conocido.
Los datos varían, los procesos fluctúan, las mejoras rara vez son instantáneas y las decisiones suelen tomarse en medio de ruido estadístico. Frente a esta realidad, muchas organizaciones se apoyan únicamente en comparaciones “antes–después” definidas de forma administrativa o en gráficos descriptivos que, aunque útiles, no resuelven las dos preguntas centrales que exigen control numérico:
¿Hubo realmente un cambio de régimen en el proceso?
Y si lo hubo, ¿en qué momento ocurrió?
En este reporte especial partimos de estas dos preguntas y proponemos un enfoque analítico riguroso, reproducible y defendible para responderlas. En una palabra: científico.
A lo largo del reporte se presenta un workflow completo, desde datos observados iniciales hasta una decisión explícita (simultáneamente administrativa y científica) sobre el punto de quiebre del proceso, combinando:
Modelos de referencia para capturar el comportamiento esperado del sistema,
Análisis de residuales para aislar desviaciones estructurales,
Métodos de monitoreo estadístico para evidenciar acumulación y fases de transición,
Y, finalmente, técnicas formales de change-point detection para determinar de manera objetiva cuándo fue que el régimen cambió.
El objetivo no es producir gráficos sofisticados, ni dashboards de colores, ni explorar todas las variantes metodológicas posibles. Eso puede hacerse si el cliente así lo quiere, pero no es el foco del problema.
El objetivo es uno solo y muy concreto:
Determinar, con base científica, si el régimen de un proceso ambiental cambió y en qué momento exacto se consolidó ese cambio.
Para ello, es necesario definir con claridad a qué nos referimos por régimen y por cambio de régimen en el contexto de un proceso ambiental que está obligado a demostrar que está resuelto a ser sostenible.
En este reporte, se entiende por régimen el conjunto de propiedades estadísticas que caracterizan el comportamiento normal de un proceso en un periodo determinado: su nivel medio, su variabilidad, su estructura temporal y su forma de responder a perturbaciones. Mientras estas propiedades permanecen estables dentro de rangos estadísticamente coherentes, se considera que el proceso opera bajo un mismo régimen.
Un cambio de régimen ocurre cuando estas propiedades dejan de ser compatibles con el comportamiento previo y se establece una nueva configuración estadística del proceso. Dicho cambio puede ser abrupto o gradual, pero se vuelve relevante en el momento en que la diferencia entre el antes y el después ya no puede atribuirse razonablemente al azar o a la variabilidad normal del sistema.
El ejemplo que desarrollaremos en este reporte es genérico y didáctico, pero el procedimiento es directamente transferible a contextos reales de desempeño ambiental, calidad, eficiencia operativa o sostenibilidad corporativa. El lector puede tomar tanto el código como los conceptos para construir su propio stack analítico con datos reales de su organización.
El documento presenta tanto la lógica conceptual como el código reproducible necesario para implementar el método y adaptarlo a distintos contextos y escalas de análisis.
Este enfoque está pensado para quienes tienen responsabilidad frente a la organización, los stakeholders, los reguladores, clientes y, en última instancia, frente a sí mismos. No para improvisar conclusiones, sino para analizar, decidir e informar, con base científica, cuando la evidencia cuantitativa importa.
En las secciones siguientes se desarrolla, paso a paso, el procedimiento y el algoritmo que permiten demostrar cómo, a partir de datos observados happenstance, es posible llegar a una conclusión clara, defendible y transparente sobre el cambio de régimen de un proceso. Con ello, se puede evaluar con base científica si una intervención va por buen camino o si requiere ajustes, reencuadre estratégico o trabajo adicional antes de continuar invirtiendo recursos que no generan los beneficios esperados.
El autor se compromete únicamente a dos conclusiones, obtenidas por la vía matemática:
Determinar si sí ocurrió un cambio de régimen.
Determinar cuándo ocurrió dicho cambio de régimen.
Nada más. Nada menos.
Comencemos.
El análisis que vamos a realizar sigue un flujo lógico: observar → modelar → analizar desviaciones.
Antes de entrar en la matemática, es importante entender el propósito de cada paso y lo que nos permitirá inferir más adelante.
Datos observados
Este primer bloque nos muestra la serie temporal real, tal como fue recolectada. Cada punto representa una medición semanal de concentración. No hay transformaciones ni filtros: es la evidencia cruda del proceso. Esta etapa nos permite familiarizarnos con el comportamiento general, detectar rangos de variación y reconocer posibles tendencias preliminares. Sin embargo, aún no nos dice si ocurrió un cambio de régimen; solo establece el punto de partida.
(w <- 1:52) [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
[26] 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
[51] 51 52
conc <- c(
35.8, 33.0, 33.6, 35.0, 33.5, 34.7, 33.6, 36.9, 38.8, 35.5,
32.2, 32.2, 33.3, 33.5, 33.0, 33.1, 33.5, 31.9, 31.7, 32.4,
34.8, 33.5, 33.9, 32.8, 34.2, 33.4, 31.1, 33.6, 28.9, 35.6,
32.9, 31.8, 37.4, 32.0, 34.8, 31.7, 32.7, 36.0, 34.2, 30.3,
39.6, 34.6, 31.7, 30.3, 34.4, 32.4, 31.1, 36.5, 33.2, 34.3,
35.8, 32.4
)Visualización interactiva
Graficar los datos con ggplot y plotly cumple un doble propósito:
Permite inspeccionar visualmente la serie para identificar patrones, picos o caídas importantes.
Facilita la interacción para que el lector explore la serie, reforzando la intuición sobre la dinámica temporal.
Esta visualización prepara la mente para comprender que lo que vemos como “tendencias” o “fluctuaciones” podría ser ruido, transición o señal de un cambio estructural.
library(ggplot2)
library(plotly)
df1 <- data.frame(
Semana = w,
Conc = conc
)
p <- ggplot(df1, aes(x = Semana, y = Conc)) +
geom_point(color = "#265129", size = 2) +
geom_line(color = "#265129", linetype = "solid") +
labs(
title = "Serie temporal observada",
x = "Tiempo (semanas)",
y = "Concentración (mg/L)"
) +
theme_minimal(base_size = 14)
ggplotly(p)Este gráfico no es evidencia. Es contexto. Es observación.
Aquí todavía no se habla de “mejora”, “impacto”, “éxito” ni “fracaso”. Solo se establece:
Justo por eso, el siguiente paso no será comparar promedios ni trazar líneas arbitrarias, sino definir un régimen de referencia y analizar las desviaciones de manera estructurada.
Antes de hablar de cambios de régimen, es indispensable responder una pregunta previa y fundamental:
¿Cómo se comporta el proceso cuando no asumimos que nada “especial” ha ocurrido?
Para ello introducimos el concepto de modelo de referencia o baseline del proceso. Este modelo no representa una intervención, ni una mejora, ni una política específica. ¿Qué representa entonces?
Representa el comportamiento esperado del proceso en el tiempo, considerando únicamente su dinámica interna y su variabilidad natural.
En este reporte utilizamos un Modelo Aditivo Generalizado (GAM) como baseline (línea base). La razón es metodológica:
El baseline actúa como una hipótesis nula operacional:
Ho: “El proceso sigue comportándose conforme a su patrón histórico esperado.”
Así, la hipótesis alternativa será:
Ha: “El proceso NO sigue comportándose conforme a su patrón histórico esperado.”
Este es el pensamiento inferencial frecuentista que desbarata el greenwashing, por completo.
library(mgcv)
# Modelo GAM: baseline del proceso
mod_ref <- gam(conc ~ s(w, k = 6), method = "REML")
# Resumen del modelo
summary(mod_ref)
Family: gaussian
Link function: identity
Formula:
conc ~ s(w, k = 6)
Parametric coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 33.6365 0.2834 118.7 <2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Approximate significance of smooth terms:
edf Ref.df F p-value
s(w) 1.619 2.002 0.836 0.437
R-sq.(adj) = 0.0143 Deviance explained = 4.56%
-REML = 111.03 Scale est. = 4.1771 n = 52
library(ggplot2)
library(plotly)
# Data frame con valores ajustados
df_baseline <- data.frame(
Semana = w,
Conc = conc,
Baseline = fitted(mod_ref)
)
# Gráfico del baseline
p_baseline <- ggplot(df_baseline, aes(x = Semana)) +
geom_point(aes(y = Conc), color = "#265129", size = 2) +
geom_line(aes(y = Conc), color = "#265129", linetype = "solid") +
geom_line(aes(y = Baseline), color = "#B22222", linewidth = 1.2) +
labs(
title = "Modelo de referencia del proceso (baseline)",
x = "Tiempo (semanas)",
y = "Concentración (mg/L)"
) +
theme_minimal(base_size = 14)
ggplotly(p_baseline)Sobre el gráfico se muestran:
Este paso es crítico porque todo el análisis posterior depende de él.
Sin un baseline explícito que parta de un modelo estadístico apropiado, cualquier afirmación de “mejora”, “impacto” o “cambio” queda sujeta a interpretación subjetiva y arbitrariedad. Ese tipo de discurso narrativo va en contra de la ciencia.
En términos de rendición de cuentas, este modelo permite separar claramente:
En la siguiente sección, utilizaremos este baseline para construir los residuales del proceso, que son la materia prima real para detectar cambios de régimen de manera objetiva y defendible.
Aquí todavía no afirmamos que el régimen haya cambiado.
Solo establecemos, con rigor estadístico, la referencia contra la cual vamos a evaluar esa afirmación.
Una vez definido el modelo de referencia, el análisis entra en su fase decisiva.
El interés ya no está en los valores observados en sí mismos, sino en cuánto y cómo se desvían del comportamiento esperado del proceso.
A estas desviaciones las llamamos residuales.
Formalmente, cada residual representa:
Dato observado – valor esperado según el baseline
Desde el punto de vista de control y rendición de cuentas, los residuales son el objeto correcto de análisis, porque:
La misión de este trabajo analítico es averiguar si el cambio de régimen ocurrió o no ocurrió. Las opiniones subjetivas están prohibidas porque no son científicas. Por eso, la regla oeprativa que debes tener presente es lo siguiente:
Si el proceso no ha cambiado de régimen, entonces los residuales (que surgen del modelo apropiadamente seleccionado) deberían comportarse como ruido alrededor de cero, sin patrones persistentes, ni tendencias, ni acumulaciones ni desplazamientos sistemáticos. Solo ruido. En términos de TSA estrictamente hablamos del ruido blanco de la ACF.
# Residuales del modelo de referencia
as.matrix((res <- resid(mod_ref))) [,1]
[1,] 1.38095061
[2,] -1.36612055
[3,] -0.71319155
[4,] 0.73973035
[5,] -0.70737713
[6,] 0.54544179
[7,] -0.50188468
[8,] 2.85054003
[9,] 4.80257850
[10,] 1.55405895
[11,] -1.69522310
[12,] -1.64550115
[13,] -0.49703222
[14,] -0.25008968
[15,] -0.70495487
[16,] -0.56190784
[17,] -0.12121779
[18,] -1.68313359
[19,] -1.84787507
[20,] -1.11562534
[21,] 1.31347532
[22,] 0.03933373
[23,] 0.46190608
[24,] -0.61880197
[25,] 0.79726285
[26,] 0.01019755
[27,] -2.27986256
[28,] 0.22724941
[29,] -4.46827567
[30,] 2.23376910
[31,] -0.46640132
[32,] -1.56857128
[33,] 4.02746889
[34,] -1.37808244
[35,] 1.41495768
[36,] -1.69324576
[37,] -0.70254682
[38,] 2.58718166
[39,] 0.77604946
[40,] -3.13584865
[41,] 6.15157004
[42,] 1.13837933
[43,] -1.77535283
[44,] -3.18956159
[45,] 0.89581673
[46,] -1.11915415
[47,] -2.43441035
[48,] 2.95011139
[49,] -0.36552812
[50,] 0.71872686
[51,] 2.20292376
[52,] -1.21290204
library(ggplot2)
library(plotly)
# Data frame de residuales
df_res <- data.frame(
Semana = w,
Residual = res
)
# Gráfico de residuales
p_res <- ggplot(df_res, aes(x = Semana)) +
geom_point(aes(y = Residual), color = "#265129", size = 2) +
geom_line(aes(y = Residual), color = "#265129") +
geom_hline(yintercept = 0, linetype = "dashed", color = "gray40") +
labs(
title = "Residuales respecto al modelo de referencia",
x = "Tiempo (semanas)",
y = "Residual (observado – baseline)"
) +
theme_minimal(base_size = 14)
ggplotly(p_res)En el gráfico se observa:
La línea horizontal en cero, que representa el régimen esperado.
Las desviaciones positivas y negativas respecto a ese régimen.
Posibles zonas donde los residuales dejan de oscilar simétricamente.
Este paso marca una diferencia clave entre análisis improvisado y análisis riguroso:
En términos de sostenibilidad, calidad o desempeño operativo, este enfoque evita conclusiones artificales que siempre son acomodos retrospectivos. Es decir:
Si estás buscando cambios de régimen en conjuntos de datos happenstance, lo que no debes hacer nunca es decidir primero “cuándo cambió el proceso” y luego buscar métodos para justificar tu decisión. Eso es anticientífico y contrario al principio de falsabilidad de la escuela de Popper. Lo que debes hacer es permitir que los datos hablen y te indiquen si hubo o no transición de régimen y cuándo ocurrió. La validación es para eso.
En la siguiente sección avanzaremos un paso más:
Aplicaremos métodos de monitoreo estadístico sobre los residuales para evaluar si estas desviaciones se acumulan de forma consistente, preparando el terreno para la detección formal del cambio de régimen.
Ahí es donde el análisis deja de ser diagnóstico y empieza a ser probatorio.
Hasta este punto hemos trabajado con magnitudes: cuánto se desvía cada observación respecto al régimen esperado.
Ahora realizamos una reducción deliberada de información. No es obligatoria ni debes ni necesitas hacerla como lo haré aquí. Aunque es totalmente aceptable, existen métodos más sofisticados. Sigamos.
Cada residual se transforma únicamente en su dirección:
# Reducción no paramétrica: signo del residual
# −1 : observación por debajo del baseline
# 0 : observación exactamente en el baseline
# +1 : observación por encima del baseline
as.matrix(z <- sign(res)) [,1]
[1,] 1
[2,] -1
[3,] -1
[4,] 1
[5,] -1
[6,] 1
[7,] -1
[8,] 1
[9,] 1
[10,] 1
[11,] -1
[12,] -1
[13,] -1
[14,] -1
[15,] -1
[16,] -1
[17,] -1
[18,] -1
[19,] -1
[20,] -1
[21,] 1
[22,] 1
[23,] 1
[24,] -1
[25,] 1
[26,] 1
[27,] -1
[28,] 1
[29,] -1
[30,] 1
[31,] -1
[32,] -1
[33,] 1
[34,] -1
[35,] 1
[36,] -1
[37,] -1
[38,] 1
[39,] 1
[40,] -1
[41,] 1
[42,] 1
[43,] -1
[44,] -1
[45,] 1
[46,] -1
[47,] -1
[48,] 1
[49,] -1
[50,] 1
[51,] 1
[52,] -1
Este paso puede parecer contraintuitivo para lectores acostumbrados a maximizar detalle numérico, pero es metodológicamente fundamental.
La razón es simple:
Para detectar un cambio de régimen, no importa tanto cuánto se desvía el proceso en un instante aislado, sino hacia dónde se desvía de forma persistente.
Al trabajar con signos:
Desde la perspectiva de rendición de cuentas, esta decisión tiene implicaciones importantes:
Esta reducción no es una simplificación ingenua, sino una estrategia clásica en control estadístico y detección de cambios: primero se estabiliza el lenguaje de la señal, luego se evalúa su acumulación en el tiempo.
En las siguientes secciones utilizaremos estos signos como insumo para construir estadísticas de monitoreo que permiten responder, con evidencia acumulada, si el proceso está migrando hacia un nuevo régimen o si las desviaciones observadas siguen siendo compatibles con las fluctuaciones del pasado, lo que significaría que no hubo cambio.
Aquí es donde el análisis deja definitivamente atrás la descripción y entra en el terreno de la decisión estadística estructural.
Una vez que cada observación ha sido reducida a su dirección respecto al régimen esperado, el siguiente paso es acumular esa información en el tiempo. Para ello utilizamos un CUSUM (Cumulative Sum) no paramétrico.
El CUSUM suma secuencialmente los signos de los residuales. Conceptualmente:
Este gráfico no pretende identificar con precisión el momento exacto del cambio. Eso lo hacemos después. Por ahora, su función es distinta y complementaria:
El CUSUM responde a la pregunta:
¿Existe evidencia acumulada de que el proceso dejó de comportarse como antes?
library(ggplot2)
library(plotly)
# CUSUM no paramétrico de signos
cusum <- cumsum(z)
df_cusum <- data.frame(
Semana = w,
CUSUM = cusum
)
p_cusum <- ggplot(df_cusum, aes(x = Semana, y = CUSUM)) +
geom_line(linewidth = 1.2, color = "#265129") +
geom_hline(yintercept = 0, linetype = "dashed", color = "gray50") +
labs(
title = "CUSUM no paramétrico (evidencia acumulada)",
x = "Semana",
y = "CUSUM (signos)"
) +
theme_minimal(base_size = 14)
ggplotly(p_cusum)Con solo dar un vistazo, parece que sí. Sin embargo, si hemos de ser formales, ningún gráfica es jamás concluyente. Para eso se necesitan las pruebas y algoritmos analíticos.
Sin embargo, desde una perspectiva de gestión y rendición de cuentas provisional, el CUSUM cumple un rol clave:
Es importante subrayar que el CUSUM no decide por sí solo el punto de quiebre. Su valor está en mostrar que la hipótesis de estabilidad del régimen empieza a ser insostenible: el gráfico claramente muestra que sí hubo un cambio que adoptó la forma de reducción.
En otras palabras, aquí no estamos “fechando” el cambio, sino demostrando que algo estructural está ocurriendo y cambiando. El cambio puede ser perjudicial si la contaminación está aumentando, o benéfico si se está reduciendo.
El CUSUM no dictamina si ese cambio es para bien o para mal. Eso lo determina el tomador de decisiones.
En la siguiente sección refinaremos esta evidencia utilizando una estadística local, Suma Móvil, (MOSUM), diseñada específicamente para acotar temporalmente la transición y preparar el terreno para tomar una decisión formal del change-point.
Mientras que el CUSUM proporciona evidencia global acumulada de que el proceso dejó de comportarse como antes, el MOSUM (Moving Sum) introduce una perspectiva distinta y crucial: una mirada local en el tiempo.
El MOSUM no acumula toda la historia del proceso. En su lugar, evalúa lo que ocurre dentro de una ventana móvil de tamaño fijo, lo que lo convierte en una herramienta especialmente adecuada para detectar fases de transición entre regímenes. El parámetro experimental es \(h\) y puede tomar distintos valores. Para saber más acerca de las reglas del parámetro \(h\), se le invita al lector a consultar en la literatura especializada en el tema.
library(ggplot2)
library(plotly)
# Tamaño de ventana (escala local del proceso)
h <- 8
# MOSUM no paramétrico de signos
mosum <- sapply(h:length(z), function(t) {
sum(z[(t - h + 1):t])
})
w_mosum <- w[h:length(w)]
df_mosum <- data.frame(
Semana = w_mosum,
MOSUM = mosum
)
p_mosum <- ggplot(df_mosum, aes(x = Semana, y = MOSUM)) +
geom_line(linewidth = 1.2, color = "#265129") +
geom_hline(yintercept = 0, linetype = "dashed", color = "gray50") +
labs(
title = paste("MOSUM no paramétrico (h =", h, ")"),
x = "Semana",
y = "MOSUM (signos)"
) +
theme_minimal(base_size = 14)
ggplotly(p_mosum)Claramente vemos que el gráfico MOSUM nos revela que sí ocurrió un cambio importante entre las semanas 11 y 28. Se invita al lector a mover el mouse sobre el gráfico. Hallará que en la esquina superior derecha hay un menú intuitivo. Explórelo.
Sea \(z_t\) la secuencia de signos de los residuales, definida como:
\[z_t = \operatorname{sign}(r_t), \quad z_t \in {-1, 0, +1}\]
donde \(r_t\) es el residual del modelo de referencia en el tiempo \(t\).
El estadístico MOSUM se define como:
\[\mathrm{MOSUM}_{t(h)} = \sum{i=t-h+1}^{t} z_i\]
donde:
Esta expresión tiene una lectura directa:
A diferencia del CUSUM, el MOSUM no crece indefinidamente. Su diseño obliga al estadístico a “olvidar” el pasado remoto, concentrándose únicamente en el comportamiento reciente.
El parámetro \(h\) representa una decisión analítica explícita:
En términos de gestión y rendición de cuentas, \(h\) debe interpretarse como:
“¿Cuántas observaciones consecutivas necesito para considerar que un cambio es real y no un accidente?”
El MOSUM cumple una función precisa dentro del procedimiento completo:
En otras palabras, el MOSUM transforma la pregunta difusa “algo parece estar cambiando” en una señal localizada que prepara el terreno para la decisión final.
En la siguiente sección utilizaremos técnicas formales de change-point detection para convertir esta evidencia visual y estadística en una fecha objetiva y defendible del cambio de régimen, con base científica.
En esta etapa el análisis deja definitivamente el terreno exploratorio y entra en el ámbito de la decisión estadística formal.
El objeto informativo mostrado enseguida corresponde al resultado directo (sin post-procesamiento ni reinterpretación ni opinión humana) del algoritmo de detección de change-point, aplicado a los residuales del modelo de referencia.
Este punto es crucial desde la perspectiva de rendición de cuentas: no se reporta una gráfica interpretada, sino la salida íntegra de un procedimiento estadístico estándar, implementado mediante una librería ampliamente utilizada, respetada y mantenida en CRAN.
Lo haremos de dos maneras.
Primero por la vía no paramétrica.
library(changepoint)
library(changepoint.np)
# Detección no paramétrica basada en la distribución empírica
summary(cpt.np(
conc,
method = "PELT",
penalty = "MBIC",
test.stat = "empirical_distribution"
))Created Using changepoint version 2.3
Changepoint type : Change in nonparametric (empirical_distribution)
Method of analysis : PELT
Test Statistic : empirical_distribution
Type of penalty : MBIC with value, 11.85373
Minimum Segment Length : 1
Maximum no. of cpts :
Changepoint Locations : 10
Segundo, por la vía páramétrica.
summary(cpt.mean(
res,
method = "AMOC",
penalty = "AIC"
))Created Using changepoint version 2.3
Changepoint type : Change in mean
Method of analysis : AMOC
Test Statistic : Normal
Type of penalty : AIC with value, 4
Minimum Segment Length : 1
Maximum no. of cpts : 1
Changepoint Locations : 10
Ambas arrojan el mismo resultado: el cambio de régimen ocurre a partir de la semana 10.
El procedimiento aplicado es:
Esto significa que el algoritmo está respondiendo a la siguiente pregunta formal:
¿Existe en la serie de datos, un instante en el que el comportamiento del proceso deja de fluctuar alrededor del mismo nivel esperado y pase a hacerlo alrededor de otro?
El método PELT (Pruned Exact Linear Time) está diseñado para identificar puntos de cambio óptimos en una serie temporal, equilibrando de forma explícita dos fuerzas contrapuestas: la evidencia estadística de cambio y la complejidad del modelo.
A diferencia de enfoques exploratorios, PELT no “busca rupturas” de manera oportunista, sino que selecciona únicamente aquellas que justifican su existencia frente a una penalización formal. En el contexto de rendición de cuentas, este enfoque es especialmente adecuado cuando se requiere demostrar que un cambio de régimen es suficientemente fuerte como para sobrevivir a un criterio conservador. Con esto evitamos las narrativas retrospectivas subjetivas y “opiniones personales de expertos”.
El resultado no es una colección de quiebres posibles, sino una decisión estadística optimizada sobre si el proceso cambió y cuándo ese cambio se consolidó. El resultado surge exclusivamente del algoritmo y por eso, es objetivo e imparcial.
El método AMOC (At Most One Change) asume explícitamente que:
Este enfoque es especialmente adecuado cuando el análisis está ligado a una intervención, política o proyecto específico, y cuando la rendición de cuentas exige una respuesta clara del tipo sí/no.
La penalización AIC controla el balance entre:
El valor mostrado en la salida indica que el algoritmo evaluó la existencia del cambio y concluyó que introducir un punto de quiebre mejora el modelo lo suficiente como para justificar su inclusión, bajo este criterio.
La línea clave del output es:
Este resultado establece, de manera explícita y reproducible, que:
No se trata de una decisión administrativa ni de una delimitación arbitraria ni recomendación humana.
Es la fecha estimada por el algoritmo como el punto en el tiempo donde el régimen cambia: a partir de la semana 10 se establece el antes y después en la línea de tiempo.
En palabras simples: lo que sea que haya cambiado, comenzó a cambiar a partir de la semana 10.
Este output cumple con los criterios fundamentales de rigor:
En términos de sostenibilidad, calidad o desempeño operativo, este punto de quiebre puede utilizarse como:
En la sección siguiente integraremos este punto de quiebre con los análisis anteriores, mostrando cómo CUSUM, MOSUM y change-point convergen hacia una misma estructura temporal, cerrando el ciclo analítico y narrativo sin recurrir a interpretaciones subjetivas, totalmente libre de subjetividades, preferencias, opiniones personales, seniority o “experiencia profesional”.
En ciencia analítica nada de eso importa. “La opinión del mejor” es totalmente irrelevante.
Aquí, finalmente, el análisis ya respondió con precisión a las dos preguntas fundamentales:
¿Este tipo de resultado analítico cómo te beneficia en tu trabajo?
Si prometiste que las cosas cambiarían y estás obligado a demostrarlo científicamente, este es el método.
En esta sección se integran todos los elementos del análisis alrededor de un único eje decisional: el punto de quiebre detectado formalmente.
El punto de quiebre los marcaremos con una línea vertical roja punteada.
A diferencia de enfoques puramente descriptivos, aquí las visualizaciones no buscan “sugerir” interpretaciones, sino todo lo contrario:
Los siguientes gráficos han sido actualizados con la marca de quiebre en rojo para confirmar visualmente que una decisión estadística ya ha sido tomada .
Lo relevante es que, con nuestro método, esa decisión no la toma ninguna persona: la tomaron dos algoritmos diseñados para cumplir la tarea de change-point detection.
Quizá no lo parezca, pero esto te protege: si el algoritmo lo dice, ¿quién lo va a contradecir?
El primer gráfico muestra los residuales del modelo de referencia junto con el punto de quiebre estimado.
Este gráfico permite observar de manera directa que:
El punto vertical no es interpretativo ni ajustado a posteriori: corresponde exactamente a la localización estimada por los dos algoritmos que aplicamos arriba: PELT y AMOC.
library(ggplot2)
library(plotly)
# Data frame para residuales
df_res <- data.frame(
Semana = w,
Residual = res
)
# Residuales con change-point
p_res <- ggplot(df_res, aes(x = Semana, y = Residual)) +
geom_point(color = "#265129") +
geom_line(color = "#265129") +
geom_hline(yintercept = 0, linetype = "dashed", color = "#2C3E50") +
geom_vline(xintercept = cp_index,
linetype = "dashed",
color = "#B03A2E",
linewidth = 1) +
labs(
title = "Residuales del proceso con punto de quiebre detectado",
x = "Semana",
y = "Residual"
) +
theme_minimal(base_size = 14)
ggplotly(p_res)El CUSUM representa la suma acumulada de los signos de los residuales, capturando la dirección persistente de las desviaciones respecto al régimen esperado.
Su función en este workflow no es localizar el momento exacto del cambio, sino responder una pregunta previa y fundamental:
¿Existe evidencia acumulada de que el proceso dejó de comportarse como antes?
Al superponer el punto de quiebre detectado formalmente, se observa que el CUSUM presenta una deriva sostenida a partir de dicho punto, lo cual es incompatible con un proceso estacionario bajo el régimen inicial.
library(ggplot2)
library(plotly)
# Data frame para CUSUM
df_cusum <- data.frame(
Semana = w,
CUSUM = cusum
)
# CUSUM con change-point
p_cusum <- ggplot(df_cusum, aes(x = Semana, y = CUSUM)) +
geom_line(color = "#196F3D", linewidth = 1) +
geom_hline(yintercept = 0, linetype = "dashed", color = "gray50") +
geom_vline(xintercept = cp_index,
linetype = "dashed",
color = "#B03A2E",
linewidth = 1) +
labs(
title = "CUSUM no paramétrico y cambio de régimen",
x = "Semana",
y = "CUSUM (signos)"
) +
theme_minimal(base_size = 14)
ggplotly(p_cusum)Al superponer el quiebre en rojo (que se estimó por PELT y AMOC) sobre la gráfica CUSUM, ya no queda discusión: la transición comenzó en la semana 10 y se ha mantenido.
La evidencia es tanto gráfica como analítica: para que sea científica, así es como debe ser.
Con nuestro nuevo y original enfoque aplicado al desempeño ambiental, el CUSUM cumple un rol específico:
Confirma la existencia de un cambio estructural a escala global.
Proporciona evidencia acumulada independiente de ventanas móviles.
Sustenta la necesidad de una detección explícita de cambio de régimen.
Así, el CUSUM establece la evidencia global, mientras que el MOSUM caracteriza la transición y el algoritmo de change-point fija la fecha del quiebre.
El tercer y último gráfico integra el mismo punto de quiebre sobre el estadístico MOSUM, que captura cambios locales y acumulativos en la dirección del error.
Aquí se observa algo fundamental para la rendición de cuentas:
Este comportamiento es típico de procesos reales, especialmente en contextos ambientales, operativos y de sostenibilidad, donde las intervenciones rara vez producen efectos inmediatos.
# Data frame para MOSUM
df_mosum <- data.frame(
Semana = w_mosum,
MOSUM = mosum
)
# MOSUM con change-point
p_mosum <- ggplot(df_mosum, aes(x = Semana, y = MOSUM)) +
geom_line(color = "#265129", linewidth = 1) +
geom_hline(yintercept = 0, linetype = "dashed", color = "gray50") +
geom_vline(xintercept = cp_index,
linetype = "dashed",
color = "#B03A2E",
linewidth = 1) +
labs(
title = "MOSUM no paramétrico y fase de transición",
x = "Semana",
y = "MOSUM (signos)"
) +
theme_minimal(base_size = 14)
ggplotly(p_mosum)¿Cómo lo leemos?
Simple: el cambio de régimen comienza en la semana 10 y el nuevo régimen alcanza su estabilidad entre las semanas 25 y 28. Esto significa que el período inestable de transición ocurrió entre las semanas 10 y 25.
Hasta ahora hemos hablado de “antes” y “después” como conceptos abstractos.
En esta sección los hacemos visibles.
Si un régimen realmente cambió, no solo deberían cambiar los valores puntuales en el tiempo, sino la forma completa de la distribución de probabilidad que genera los datos.
A continuación superponemos las distribuciones empíricas del proceso antes y después del punto de quiebre detectado.
No asumimos normalidad, no imponemos medias ni varianzas: dejamos que los datos hablen mediante histogramas suavizados y estimaciones no paramétricas de densidad (KDE).
Si ambos regímenes pertenecieran a la misma realidad estadística, estas curvas se traslaparían de forma sustancial.
Por otro lado, si el régimen cambió, el contraste no será necesariamente total, pero cualquier cambio sí será visiblemente evidente y puede haber empalme.
Observa de cerca las distribuciones de probabilidad de ambos regímenes.
library(plotly)
# Punto de quiebre
cp <- 10
# Regímenes
conc_before <- conc[w <= cp]
conc_after <- conc[w > cp]
# KDE con colas extendidas
dens_before <- density(conc_before, adjust = 1.5)
dens_after <- density(conc_after, adjust = 1.5)
p <- plot_ly() |>
# Histograma: antes del cambio
add_histogram(
x = conc_before,
histnorm = "probability density",
name = "Antes del cambio",
opacity = 0.45,
marker = list(color = "rgba(215,154,58,0.65)"), # #D79A3A
nbinsx = 12
) |>
# Histograma: después del cambio
add_histogram(
x = conc_after,
histnorm = "probability density",
name = "Después del cambio",
opacity = 0.45,
marker = list(color = "rgba(38,81,41,0.65)"), # #265129
nbinsx = 12
) |>
# KDE antes (línea sólida)
add_lines(
x = dens_before$x,
y = dens_before$y,
name = "Densidad empírica (antes)",
line = list(
color = "#D79A3A",
width = 3
)
) |>
# KDE después (línea sólida)
add_lines(
x = dens_after$x,
y = dens_after$y,
name = "Densidad empírica (después)",
line = list(
color = "#265129",
width = 3
)
) |>
layout(
title = list(
text = "Cambio de régimen: distribuciones de probabilidad diferentes",
x = 0.5
),
xaxis = list(title = "Concentración (mg/L)"),
yaxis = list(title = "Densidad empírica"),
barmode = "overlay",
legend = list(orientation = "h", x = 0.22, y = -0.18)
)
p¿Qué opina el lector? ¿Son iguales? ¿Son diferentes? ¿Son muy diferentes? ¿Son poco diferentes?
Este gráfico resume visualmente lo que significa un cambio de régimen:
Cada color representa una realidad estadística distinta del proceso.
Las diferencias no se limitan a un desplazamiento del promedio: cambian la forma, la dispersión y las colas de la distribución.
La densidad empírica (KDE) muestra que los datos antes y después del punto de quiebre no provienen de la misma distribución subyacente.
Esto es precisamente lo que los métodos de change-point detection formalizan matemáticamente:
La transición entre dos regímenes probabilísticos distintos.
Hasta ahora hemos mostrado evidencia visual y estructural de un cambio de régimen.
El último paso es formular explícitamente una prueba de hipótesis clásica, no paramétrica, que contraste si ambos regímenes pueden considerarse estadísticamente equivalentes.
Para ello utilizamos la prueba de Mann–Whitney (Wilcoxon rank-sum), adecuada cuando no se asume normalidad ni se comparan medias, sino la localización general de dos distribuciones independientes.
# Prueba no paramétrica de igualdad de distribuciones
mw_test <- wilcox.test(
conc_before,
conc_after,
alternative = "two.sided",
exact = FALSE
)
mw_test
Wilcoxon rank sum test with continuity correction
data: conc_before and conc_after
W = 324.5, p-value = 0.008085
alternative hypothesis: true location shift is not equal to 0
La prueba rechaza la hipótesis nula de igualdad distributiva entre los datos antes y después del punto de quiebre (p-valor = 0.008).
Sin imponer supuestos paramétricos, este resultado confirma que ambos conjuntos de observaciones no provienen de la misma distribución subyacente.
En términos prácticos, esto significa que la diferencia entre regímenes no puede atribuirse a variabilidad aleatoria ni a la suerte: hubo efectivamente una causa, intervención o esfuerzo que empujó el impacto ambiental hacia un nivel menor.
En conjunto con la detección explícita del change-point y el contraste visual de las distribuciones empíricas, la evidencia converge en una conclusión clara y operativamente verificable:
El proceso cambió de régimen en un momento identificable y estadísticamente defendible.
Y dicho sin rodeos:
Si estos datos provinieran de un proyecto tuyo, puedes celebrar, destapar la champaña y decirlo sin complejos:
👉 Misión cumplida.
La tarea es demasiado simple:
Tienes una serie de datos. Identificas el punto de quiebre. Descubres si el cambio ocurrió o no.
Eso es todo.
Se dice simple. El proceso es laborioso.
Con esta integración visual que hicimos, el workflow completo se cierra:
A partir de este punto, ya no hay ambigüedad:
Este es el tipo de análisis que permite pasar de narrativas vagas a evidencia cuantitativa, y de reportes declarativos a rendición de cuentas basada en datos.
Espero que esta información haya sido de tu agrado. Quiero aclarar que, aunque útil e ilustrativa, no es completa ni pretende serlo. Faltan más consideraciones, pero para propósitos educativos espero que te haya servido.
¿Para qué hice esto?
Lo único que busco es mostrarle al lector una sola cosa: el auténtico rigor científico que demuestra la verdad acerca de un asunto, exige análisis. Sin él, solo tenemos nuestras opiniones y preferencias.
Tú eliges: informar con cifras validadas, o describir con discursos convincentes.
Si en este reporte especial encuentras cualquier error, inconsistencia o contradicción es responsabilidad totalmente mía. Házmela saber.
Gracias y buena suerte.
Y recuerda el origen del greenwashing:
Sin datos, ni análisis, ni algoritmos, ni método, ni validación estocástica, ni probabilidad ni estadística, la sostenibilidad no es ética. Es estética.
Bases de la validación en ciencias aplicadas y medio ambiente
Bases del análisis multivariable para procesos fisicoquímicos
Bases del aseguramiento de calidad aplicado al desempeño ambiental, parte I
Bases del aseguramiento de calidad aplicado al desempeño ambiental, parte II
Diseño científico de calendarios de muestreo con base estocástica por Transformada de Fourier
Base científica para demostrar los efectos benéficos de intervenciones ambientales
Para orientación, consultas, estudios y proyectos relacionados con validación de datos, contáctenos:
No contamos historias para que los números “se vean bien”.
Si un resultado no puede sostenerse con evidencia, no lo maquillamos con narrativa.
No entregamos cifras para tranquilizar conciencias.
Nuestro trabajo no existe para generar comodidad, sino claridad.
No presentamos conclusiones que no estaríamos dispuestos a defender públicamente.
Si un resultado no resiste escrutinio, no se publica.
No convertimos la incertidumbre en silencio.
Ocultarla, minimizarla o ignorarla es una forma de engaño.
No afirmamos impactos positivos que no puedan demostrarse.
Decir “vamos bien” sin evidencia es una falta ética, no una opinión técnica.
No trabajamos para justificar decisiones ya tomadas.
Nuestro rol no es legitimar discursos, sino evaluar hechos.
No ajustamos el rigor según conveniencia política, institucional o comercial.
La responsabilidad ambiental no se negocia.
No confundimos sostenibilidad con buena intención.
Las intenciones no reducen impactos.
Las decisiones informadas, sí.
No usamos el lenguaje de la ciencia para encubrir ausencia de ciencia.
Eso no es error metodológico: es deshonestidad profesional.
En resumen:
No participamos en la simulación de responsabilidad.